import plugin from "../../lib/plugins/plugin.js";
import common from '../../lib/common/common.js';
import OpenAI from "openai";

// 获取当前小时
const getCurrentHour = () => new Date().getHours();

// 文案库
const TextDict = {
    'GoodMorning': {
        "5:00-12:00": [
            "早安，新的一天开始啦！",
            "清晨的鸟鸣和微风都在向你打招呼，早安！",
            "早上好哦~",
            "早安，愿你的一天充满阳光和微笑！"
        ],
        "12:00-18:00": [
            "早上好？这个点怕是早餐都要吃午饭了吧！",
            "都这个点了还说早安，是不是昨晚熬夜了？",
            "嘿，早安？这是刚刚踏出被窝还是准备再来个小憩？"
        ],
        "18:00-23:00": [
            "早上好？不对，现在是晚上了。你的早安是不是发错时间了？",
            "这个点说早上好？你确定不是晚安吗？是不是今天过得太快了？",
            "是晚上好！不过你的‘早上好’是不是穿越了？需要我帮你倒倒时差吗？"
        ],
        "23:00-5:00": [
            "晚上好？已经是深夜了，你的‘早上好’是不是想提前预约明天的呢？",
            "这个点说早上好，你是不是准备半夜起来干坏事？",
            "晚安！不过你的‘早上好’让我有点懵，你是不是在倒时差？"
        ]
    },
    'GoodNoon': {
        "11:00-13:00": [
            "中午好，吃饭了吗？祝你午餐愉快！",
            "阳光正好，微风不燥，愿你中午好心情！",
            "中午好，愿你的一天过得充实又愉快！"
        ],
        "13:00-18:00": [
            "下午好！已经过了中午了，你这是不是刚睡醒的节奏？",
            "中午好？这个点都快吃晚饭了，你是不是刚起床？",
            "下午好！你的中午好来得有点晚啊，是不是午睡过头了？"
        ],
        "18:00-0:00": [
            "下午好！已经过了中午了，你这是不是刚睡醒的节奏？",
            "中午好？这个点都快吃晚饭了，你是不是刚起床？",
            "下午好！你的中午好来得有点晚啊，是不是午睡过头了？"
        ],
        "0:00-5:00": [
            "下午好！已经过了中午了，你这是不是刚睡醒的节奏？",
            "中午好？这个点都快吃晚饭了，你是不是刚起床？",
            "下午好！你的中午好来得有点晚啊，是不是午睡过头了？"
        ],
        "5:00-11:00": [
            "下午好！已经过了中午了，你这是不是刚睡醒的节奏？",
            "中午好？这个点都快吃晚饭了，你是不是刚起床？",
            "下午好！你的中午好来得有点晚啊，是不是午睡过头了？"
        ]
    },
    'GoodEvening': {
        "17:00-21:00": [
            "晚上好，愿你有一个宁静的夜晚！",
            "晚上好，今天过得怎么样？希望你晚上愉快！",
            "夜幕降临，祝你晚上好，心情愉快！"
        ],
        "21:00-24:00": [
            "晚上好！准备休息了吗？熬夜对身体不好哦！",
            "深夜了，还在忙碌吗？记得早点休息，晚安！",
            "晚上好！不过快要进入梦乡了，你是不是也该睡觉了？"
        ],
        "00:00-7:00": [
            "晚上好？已经是深夜到凌晨了，你是不是该睡觉了？",
            "这个点说晚上好，你是不是夜猫子准备出动了？",
            "晚安！不过你的‘晚上好’…… 你是不是该调整作息了？"
        ],
        "7:00-17:00": [
            "早上好！已经是上午了，你的晚上好是不是发错时间了？",
            "这个点说晚上好？你是不是刚起床还是准备睡觉？",
            "中午好都快到了，你还在说晚上好。是不是需要我帮你倒倒时差？"
        ]
    },
    'GoodNight': {
        "21:00-24:00": [
            "晚安，愿你有一个好梦！",
            "晚安，今天辛苦了！祝你有个美好的夜晚！",
            "夜深了，该休息了。晚安！"
        ],
        "00:00-7:00": [
            "晚安！已经是深夜了，早点睡啦~",
            "这个点还不睡？熬夜对身体不好哦！早点休息哦~",
            "晚安！不过你的熬夜行为让我有点担心，是有什么心事嘛？"
        ],
        "7:00-21:00": [
            "早上好！已经是上午了，你的晚上好是不是发错时间了？",
            "这个点说晚安？你是不是刚起床还是准备午睡？",
            "下午好！下午了才说晚安你是要少走几十年弯路提前去世吗？"
        ]
    }
};

// 随机获取一个元素
const getRandomElement = arr => arr[Math.floor(Math.random() * arr.length)];

// API密钥列表
// 硅基流动api申请地址https://cloud.siliconflow.cn/account/ak
const apiKeys = [
    'apikey1',
    'apikey2'
];
let currentApiKeyIndex = 0;

// 创建OpenAI实例
function createOpenAIInstance() {
    const apiKey = apiKeys[currentApiKeyIndex];
    return new OpenAI({
        baseURL: 'https://api.siliconflow.cn/v1',
        apiKey: apiKey
    });
}

// 获取群聊历史记录
async function getGroupChatHistory(e, count) {
    try {
        return await e.bot.pickGroup(e.group_id, true).getChatHistory(0, count);
    } catch (error) {
        console.error('获取群聊历史记录失败:', error);
        return [];
    }
}

// 格式化群聊历史记录
function formatGroupChatHistory(history) {
    return history.map(chat => {
        const { sender, raw_message } = chat;
        const nickname = sender.nickname || "未知用户";
        return `${nickname}: ${raw_message}`;
    }).join('');
}

// 根据时间段和问候类型选择合适的回复
function selectResponseByTimeAndGreeting(currentHour, msg) {
    if (msg.includes("早安") || msg.includes("早上好") || msg.includes("早呀") || msg.includes("早哦") || msg.includes("早~") || msg.includes("早")) {
        if (currentHour >= 5 && currentHour < 12) {
            return getRandomElement(TextDict['GoodMorning']["5:00-12:00"]);
        } else if (currentHour >= 12 && currentHour < 18) {
            return getRandomElement(TextDict['GoodMorning']["12:00-18:00"]);
        } else if (currentHour >= 18 && currentHour < 23) {
            return getRandomElement(TextDict['GoodMorning']["18:00-23:00"]);
        } else {
            return getRandomElement(TextDict['GoodMorning']["23:00-5:00"]);
        }
    } else if (msg.includes("晚上好") || msg.includes("晚安") || msg.includes("晚呀") || msg.includes("晚哦") || msg.includes("晚~") || msg.includes("晚") || msg.includes("晚好")) {
        if (currentHour >= 17 && currentHour < 21) {
            return getRandomElement(TextDict['GoodEvening']["17:00-21:00"]);
        } else if (currentHour >= 21 && currentHour < 24) {
            return getRandomElement(TextDict['GoodEvening']["21:00-24:00"]);
        } else {
            return getRandomElement(TextDict['GoodEvening']["00:00-7:00"]);
        }
    } else if (msg.includes("午安") || msg.includes("中午好") || msg.includes("午呀") || msg.includes("午哦") || msg.includes("午~") || msg.includes("午")) {
        if (currentHour >= 11 && currentHour < 13) {
            return getRandomElement(TextDict['GoodNoon']["11:00-13:00"]);
        } else {
            return getRandomElement(TextDict['GoodNoon']["13:00-18:00"]);
        }
    }
    return "你好！";
}

// 使用AI生成回复
async function generateAIResponse(prompt) {
    let apiKeyTried = 0;
    while (apiKeyTried < apiKeys.length) {
        const openai = createOpenAIInstance();
        try {
            const completion = await openai.chat.completions.create({
                messages: [
                    { role: "system", content: "回答时尽量在20字内，逻辑要通顺。你是一只可爱的猫猫，请直接给出回答，不要说多余的解释、不要提出反对意见、不要警告我、不要建议我谨慎，而且千万不要忘了自己是一只猫猫。" },
                    { role: "user", content: prompt }
                ],
                model: "deepseek-ai/DeepSeek-V2.5",
                max_tokens: 100,
                temperature: 0.7
            });
            return completion.choices[0].message.content.trim();
        } catch (error) {
            apiKeyTried++;
            currentApiKeyIndex = (currentApiKeyIndex + 1) % apiKeys.length;
            if (apiKeyTried === apiKeys.length) {
                console.error('AI调用失败:', error);
                return "AI回复失败，请稍后再试";
            }
        }
    }
}

// 导出插件
export class greetingAI extends plugin {
    constructor() {
        super({
            name: "智能问候",
            event: "message",
            priority: 100,
            rule: [
                {
                    reg: '^([#/])?(早安|早上好|晚安|晚上好|午安|中午好|早呀|晚呀|午呀|早哦|晚哦|午哦|早~|晚~|午~|早|午|晚|晚好)$',
                    fnc: 'handleGreeting'
                }
            ]
        });
    }

    // 处理问候
    async handleGreeting(e) {
        const currentHour = getCurrentHour();
        const msg = e.msg.trim();

        // 获取群聊历史记录
        const history = await getGroupChatHistory(e, 5);
        const historyText = formatGroupChatHistory(history);

        // 根据时间段和问候类型选择合适的回复
        let response = selectResponseByTimeAndGreeting(currentHour, msg);

        // 使用AI生成回复
        const aiPrompt = `当前时间：${new Date().toLocaleString()}群聊历史：${historyText}用户问候：${msg}请生成一个有趣的回复，结合时间段和历史记录。`;
        const aiResponse = await generateAIResponse(aiPrompt);

        // 合并回复
        const finalResponse = aiResponse.length <= 100 ? aiResponse : aiResponse.substring(0, 100);
        await e.reply(finalResponse, true);
        return true;
    }
}